package com.thinkwide.data.ormapping;

import com.thinkwide.data.core.MFString;
import com.thinkwide.data.ormapping.datatable.MFDataColumn;
import com.thinkwide.data.ormapping.datatable.MFDataTable;
import com.thinkwide.data.ormapping.enums.MFDataType;

public class MFDbTypeCheck {
    private String dbType;

    public boolean isDate() {

        return true;
    }

    public MFDbTypeCheck(MFDataAdapter adapter) {
        dbType = adapter.getTransaction().getDbType();
    }

    public void setDbType(String dbType) {
        this.dbType = dbType;
    }

    public String getDbType() {
        return dbType;
    }

    public void setTableDbType(MFDataTable table) {
        if (MFString.compareNoCase(dbType, "oracle")) {
            for (MFDataColumn col : table.getColumns()) {
                //MFDebug.println(col.getDataType());
                if (MFString.compareNoCase(col.getDataType(), "date")) {
                    col.setXdataType(MFDataType.dtDate);
                }

                if (MFString.compareNoCase(col.getDataType(), "Integer")
                        || MFString.compareNoCase(col.getDataType(), "INT")
                        || MFString.compareNoCase(col.getDataType(), "LONG")) {
                    col.setXdataType(MFDataType.dtInt);
                }

                if (MFString.compareNoCase(col.getDataType(), "Float")) {
                    col.setXdataType(MFDataType.dtFloat);
                }

                if (MFString.compareNoCase(col.getDataType(), "VarChar2") || MFString.compareNoCase(col.getDataType(), "VarChar")) {
                    col.setXdataType(MFDataType.dtVarChar);
                }

                if (MFString.compareNoCase(col.getDataType(), "clob")) {
                    col.setXdataType(MFDataType.dtClob);
                }

                if (MFString.compareNoCase(col.getDataType(), "blob")) {
                    col.setXdataType(MFDataType.dtBlob);
                }

                if (MFString.compareNoCase(col.getDataType(), "char")) {
                    col.setXdataType(MFDataType.dtChar);
                }

                if (MFString.compareNoCase(col.getDataType(), "number") || MFString.compareNoCase(col.getDataType(), "NUMERIC")) {
                    col.setXdataType(MFDataType.dtNumber);
                }
            }
        }

        if (MFString.compareNoCase(dbType, "mssql")) {
            for (MFDataColumn col : table.getColumns()) {
                if (MFString.compareNoCase(col.getDataType(), "date")) {
                    col.setXdataType(MFDataType.dtDate);
                }

                if (MFString.compareNoCase(col.getDataType(), "datetime")) {
                    col.setXdataType(MFDataType.dtDateTime);
                }

                if (MFString.compareNoCase(col.getDataType(), "Integer") ||
                        MFString.compareNoCase(col.getDataType(), "int") ||
                        MFString.compareNoCase(col.getDataType(), "bigint") ||
                        MFString.compareNoCase(col.getDataType(), "tinyint")) {
                    col.setXdataType(MFDataType.dtInt);
                }

                if (MFString.compareNoCase(col.getDataType(), "Float")) {
                    col.setXdataType(MFDataType.dtFloat);
                }

                if (MFString.compareNoCase(col.getDataType(), "VarChar") ||
                        MFString.compareNoCase(col.getDataType(), "nvarChar")) {
                    col.setXdataType(MFDataType.dtVarChar);
                }

                if (MFString.compareNoCase(col.getDataType(), "text") ||
                        MFString.compareNoCase(col.getDataType(), "ntext")) {
                    col.setXdataType(MFDataType.dtClob);
                }

                if (MFString.compareNoCase(col.getDataType(), "image")) {
                    col.setXdataType(MFDataType.dtBlob);
                }

                if (MFString.compareNoCase(col.getDataType(), "bit")) {
                    col.setXdataType(MFDataType.dtBit);
                }

                if (MFString.compareNoCase(col.getDataType(), "char")) {
                    col.setXdataType(MFDataType.dtChar);
                }

                if (MFString.compareNoCase(col.getDataType(), "uniqueidentifier")) {
                    col.setXdataType(MFDataType.dtGuid);
                }

                if (MFString.compareNoCase(col.getDataType(), "money")) {
                    col.setXdataType(MFDataType.dtMoney);
                }

                if (MFString.compareNoCase(col.getDataType(), "numeric")) {
                    col.setXdataType(MFDataType.dtNumber);
                }
            }
        }
    }

}
